From d389ee3861bcb00815809e3bc446721ebb2e81c6 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Tue, 4 Nov 2008 12:07:22 +0900 Subject: [PATCH] [IA64] Fix HVM VGA abnormal. Conversion from p2m entry to physical address, it needs to use _PAGE_PPN_MASK to mask out some bits which are used by other purposes by p2m entry. Sign-off-by : Xiantao Zhang --- xen/arch/ia64/vmx/vtlb.c | 3 ++- xen/arch/ia64/xen/mm.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/arch/ia64/vmx/vtlb.c b/xen/arch/ia64/vmx/vtlb.c index fa7ed2b7e0..d465150722 100644 --- a/xen/arch/ia64/vmx/vtlb.c +++ b/xen/arch/ia64/vmx/vtlb.c @@ -522,7 +522,8 @@ static u64 translate_phy_pte(VCPU *v, u64 pte, u64 itir, u64 va) * which is required by vga acceleration since qemu maps shared * vram buffer with WB. */ - if (mfn_valid(maddr >> PAGE_SHIFT) && phy_pte.ma != VA_MATTR_NATPAGE) + if (mfn_valid((maddr & _PAGE_PPN_MASK) >> PAGE_SHIFT) + && phy_pte.ma != VA_MATTR_NATPAGE) phy_pte.ma = VA_MATTR_WB; maddr = ((maddr & _PAGE_PPN_MASK) & PAGE_MASK) | (paddr & ~PAGE_MASK); diff --git a/xen/arch/ia64/xen/mm.c b/xen/arch/ia64/xen/mm.c index 1d530e77ce..518d225c5a 100644 --- a/xen/arch/ia64/xen/mm.c +++ b/xen/arch/ia64/xen/mm.c @@ -926,7 +926,8 @@ __assign_domain_page(struct domain *d, /* in HVM guest, when VTD is enabled, * P2M entry may change from _PAGE_IO type to real MMIO page */ - if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) { + if(is_hvm_domain(d) && (pte_val(ret_pte) & _PAGE_IO) && + !mfn_valid(physaddr >> PAGE_SHIFT)) { old_pte = ret_pte; goto again_hvm_page_io; } -- 2.30.2